//package com.fdb.efp.limit.service.impl;
//
//import java.util.Objects;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//
//import com.alibaba.fastjson.JSONObject;
//import com.gdrcu.lp.console.service.api.BizParamCfgService;
//import com.gdrcu.lp.console.service.api.SUserService;
//import com.gdrcu.lp.console.service.vo.BizParamCfgVO;
//import com.gdrcu.lp.console.service.vo.SUserVO;
//import com.gdrcu.lp.cus.common.CusRptConstant;
//import com.gdrcu.lp.xf.service.api.BizFlowExeProcessService;
//import com.gdrcu.lp.xf.service.vo.BizFlowExeProcessVO;
//import com.fdb.efp.cus.service.facade.CusRptRecordService;
//import com.fdb.efp.cus.service.vo.CusRptRequestVO;
//import com.fdb.basic.framework.core.base.FrameworkService;
//import com.fdb.basic.framework.core.constant.BaseConstant;
//import com.fdb.basic.framework.core.exception.PauseException;
//import com.fdb.basic.framework.core.util.MD5Util;
//import com.fdb.basic.framework.core.util.StringUtil;
//import com.fdb.basic.framework.core.util.TimeUtil;
//import LmtIndivAppDao;
//import LmtIndivApp;
//import com.fdb.efp.limit.service.facade.QueryReportService;
//
//@Service("queryReportService")
//public class QueryReportServiceImpl implements QueryReportService, FrameworkService {
//    
//    private static Logger logger = LoggerFactory.getLogger(QueryReportServiceImpl.class);
//    
//    @Autowired
//    private LmtIndivAppDao indivAppDao;
//    
//    @Autowired
//    @Qualifier("cusRptRecordService")
//    private CusRptRecordService cusRptRecordService;
//    
//    @Autowired
//    @Qualifier("sUserService")
//    private SUserService sUserService;
//    
//    @Autowired
//    @Qualifier("bizParamCfgService")
//    private BizParamCfgService bizParamCfgService;
//    
//    @Autowired
//    @Qualifier("bizFlowExeProcessService")
//    private BizFlowExeProcessService bizFlowExeProcessService;
//
//    @Value("${credit.rpt.queryCase}")
//	private String queryCase;
//    
//    @Override
//    public String queryCreditReport(String bizSerno) throws Exception {
//        logger.info("开始查询客户征信信息，bizSerno=" + bizSerno);
//        BizFlowExeProcessVO exeProcess = this.queryBizFlowExeProcessByBizSerno(bizSerno);
//        //如果已经处理完成，直接返回
//        if(BaseConstant.YES.equals(exeProcess.getFinishInd())) {
//            return exeProcess.getResultParam();
//        }
//        boolean success = true;
//        try {
//            LmtIndivApp lmtIndivApp = new LmtIndivApp();
//            lmtIndivApp.setLmtSerno(bizSerno);
//            lmtIndivApp = indivAppDao.queryByPk(lmtIndivApp);
//            if(null == lmtIndivApp) {
//                logger.error("查询客户征信报告出错，未查询到授信申请信息，bizSerno=" + bizSerno);
//                throw new Exception("查询客户征信报告出错，未查询到授信申请信息，bizSerno=" + bizSerno);
//            }
//            CusRptRequestVO cr = new CusRptRequestVO();
//            cr.setBrchNo(lmtIndivApp.getMainBrId());//机构号 请求时必填
//            cr.setmBrch(lmtIndivApp.getLegalOrgCode());//法人机构号 请求时必填
//            cr.setCrdtCustMgerNo(lmtIndivApp.getCusManager());//信贷客户经理号 请求时必填
//            SUserVO sUserVo = new SUserVO();
//            sUserVo.setUserCode(lmtIndivApp.getCusManager());
//            //查询用户信息
//            sUserVo = sUserService.queryByPk(sUserVo);
//            String operName = sUserVo==null?"":sUserVo.getUserName();//客户经理姓名
//            cr.setOperName(operName);//信贷客户经理姓名 请求时必填
//            cr.setName(lmtIndivApp.getCusName());//客户姓名    请求时必填
//            cr.setCertTp(lmtIndivApp.getCertType());//证件类型  请求时必填
//            cr.setCertNo(lmtIndivApp.getCertCode());//证件号码  请求时必填
//            cr.setQryReasons(CusRptConstant.CREDIT_RPT_CASE_02);//查询原因  请求时必填
//            cr.setCrdtReportTp(CusRptConstant.CREDIT_RPT_VER_30);//信用报告版式  请求时必填
//            cr.setQryTp(CusRptConstant.CREDIT_RPT_QTYPE_0);//查询类型'0':'信用报告查询', '1':'身份信息核查'     请求时必填
//            //cr.setQryDt(qryDt);//查询日期   请求时必填
//            //cr.setQryMethod(CusRptConstant.CREDIT_RPT_FTYPE_2);//查询方式1本地库优先2实时查询人行库  请求时必填
//            //cr.setQryMethod(CusRptConstant.CREDIT_RPT_FTYPE_1);//查询方式1本地库优先2实时查询人行库  请求时必填
//            cr.setQryMethod(queryCase);//查询方式1本地库优先2实时查询人行库  请求时必填 
//            
//            logger.info("根据法人机构号查询业务配置参数，legalOrgCode=" + lmtIndivApp.getLegalOrgCode());
//            BizParamCfgVO bizParamCfgVO = bizParamCfgService.queryByLegalOrgCode(lmtIndivApp.getLegalOrgCode());
//            logger.info("业务配置参数为：" + JSONObject.toJSONString(bizParamCfgVO));
//            String crdExpiryDt = Objects.isNull(bizParamCfgVO)?null:bizParamCfgVO.getCrdExpiryDt();//征信查询有效期（天）
//            crdExpiryDt = StringUtil.isEmpty(crdExpiryDt)?"0":crdExpiryDt;
//            
//            cr.setLocalCreditDataValidityPrd(crdExpiryDt);//本地征信数据有效期 查询方式为1本地库优先，才需要录入
//            cr.setBizSerno(bizSerno);//业务流水号
//            
//            logger.info("开始查询客户征信信息，请求参数：" + JSONObject.toJSONString(cr));
//            String returnCode = cusRptRecordService.getCreditReport(cr);
//            if(!CusRptConstant.CREDIT_RPT_SUCCESS.equals(returnCode)) {
//                throw new Exception("查询客户征信信息失败！");
//            }
//            logger.info("查询客户征信信息结束！bizSerno=" + bizSerno);
//        } catch (Exception e) {
//            success = false;
//            logger.error("查询客户征信报告出现异常！", e);
//            throw new PauseException(e.getMessage());
//        } finally {
//            exeProcess.setFinishSteps(success?1:0);//已完成步骤数
//            exeProcess.setTotalSteps(1);//总步骤数，只有1步
//            exeProcess.setFinishInd(exeProcess.getFinishSteps()==exeProcess.getTotalSteps()?BaseConstant.YES:BaseConstant.NO);//是否已完成
//            exeProcess.setResultParam("");//执行结果参数
//            exeProcess.setLastUpdateTime(TimeUtil.getCurrentDateTime());//最后修改时间
//            
//            bizFlowExeProcessService.updateBizFlowExeProcessByPk(exeProcess);
//        }
//        return null;
//    }
//    
//    /**
//     * 查询业务流转执行过程记录
//     * @param bizSerno
//     * @return
//     */
//    private BizFlowExeProcessVO queryBizFlowExeProcessByBizSerno(String bizSerno) {
//        //获取调用此方法的方法名
//        String clazzName = this.getClass().getName();
//        //elmArr[1].getMethodName()：当前方法名，elmArr[2].getMethodName()：调用当前方法的方法名，以此类推
//        StackTraceElement[] elmArr = Thread.currentThread().getStackTrace();
//        String methodName = elmArr[2].getMethodName();
//        String wholeNameMD5 = MD5Util.getMD5ofStr(clazzName + "." + methodName);
//        
//        BizFlowExeProcessVO bizFlowExeProcessVo = new BizFlowExeProcessVO();
//        bizFlowExeProcessVo.setBizSerno(bizSerno);//业务流水号
//        bizFlowExeProcessVo.setExeMethodMd5(wholeNameMD5);//执行方法名MD5值
//        BizFlowExeProcessVO bizFlowExeProcessVoFromDB = bizFlowExeProcessService.queryBizFlowExeProcessByPk(bizFlowExeProcessVo);
//        if(Objects.nonNull(bizFlowExeProcessVoFromDB) && !wholeNameMD5.equals(bizFlowExeProcessVoFromDB.getExeMethodMd5())) {
//            bizFlowExeProcessVoFromDB.setFinishSteps(0);
//            bizFlowExeProcessVoFromDB.setTotalSteps(1);//总步骤数
//            bizFlowExeProcessVoFromDB.setFinishInd(BaseConstant.NO);
//            bizFlowExeProcessVoFromDB.setResultParam("");
//            bizFlowExeProcessVoFromDB.setExeMethodMd5(wholeNameMD5);//执行方法名MD5值
//        }
//        
//        return Objects.nonNull(bizFlowExeProcessVoFromDB)?bizFlowExeProcessVoFromDB:bizFlowExeProcessVo;
//    }
//}
